package ejercicio4;

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class Monitor {
	
	private int recursos;
	final Lock lock = new ReentrantLock();
	final Condition noLleno = lock.newCondition();
	final Condition noVacio = lock.newCondition();
	
	public Monitor() {
		super();
		this.recursos = 0;
	}

	public void producir(long id,Thread th){
		lock.lock();
		try{
			while(recursos==10){
				System.out.println("Buffeer lleno");
				noLleno.await();
			}
			System.out.println("El productor "+id+" ha empezado a introducir nuevos datos");
			th.suspend();
			recursos++;
			System.out.println("El Productor "+id+" ha introducido nuevos datos en el Buffer "+recursos);
			noVacio.signal();
		}catch(InterruptedException e){
			
		}finally{
			lock.unlock();
		}
		
	}
	
	public synchronized void consumir(long id,Thread th){
		lock.lock();
		try{
			while(recursos==0){
				System.out.println("Buffer vacio");
				noVacio.await();
			}
			System.out.println("El consumidor "+id+" ha empezado a extraer datos");
			th.suspend();
			recursos--;
			System.out.println("El consumidor "+id+" a extraido datos del Buffer "+recursos);
			noLleno.signal();
			
		}catch(InterruptedException e){
			
		}finally{
			lock.unlock();
		}
	}

}
